package leetcode;
import com.sun.org.apache.xpath.internal.operations.Bool;

import java.lang.Character;
/**
 * Created by 林剑 on 2016/10/15.
 */
public class leetcode420 {
    public int strongPasswordChecker(String s) {
        //type1
        //type2
        //type3
        //3中每少一种记一次，2每有三个连续的字符记录一次，1每少或者多一个记一次。
        //三种相加的时候，2和3取最大值，做替换操作。1是少于的时候取三者的最大值，1是大于的时候1+2和3的最大值-1/3取上值
        //我并不知道这种算法是否正确，先试一下
        int length = s.length();
        if (length == 0) return 6;
        int type1=0,type2=0,type3=0;
        int flagDigit =0, flagLower =0, flagUper = 0;
        for (int i =0;i<length;i++){
            if(Character.isDigit(s.charAt(i))){flagDigit=1;}
            if(Character.isLowerCase(s.charAt(i))){flagLower=1;}
            if(Character.isUpperCase(s.charAt(i))){flagUper=1;}
        }
        type3 =  3 - (flagDigit+flagLower+flagUper);
        int i = 0;
        while (i<length){
            if (s.charAt(i) == s.charAt(i+1)&&s.charAt(i+1)==s.charAt(i+2)){
                i+=3;
                type2++;
            }
            else i++;
        }
        if (length < 6){
            return (6-length)>(type2>type3?type2:type3)?(6-length):(type2>type3?type2:type3);
        }
        if (length > 20){
            return (length-20)*2/3+type2+type3;//1还需要取上值

        }
        else return type2>type3?type2:type3;
    }
}
